﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entity;
using Data;

namespace Business
{
    /// <summary>
    /// Ce service particulier à pour vocation de sécuriser les données en indiquant si un 
    /// utilisateur a le droit de consulter une information.
    /// </summary>
    public class DroitsService
    {

        /// <summary>
        /// Méthode privée permettant de rechercher l'identifiant à partir d'une classe 
        /// utilisateur quelqu'en soit la nature.
        /// </summary>
        /// <param name="utilisateur">La classe utilisateur</param>
        /// <returns>L'identifiant de l'utilisateur, ou alors -1 si non trouvé</returns>
        private static int rechercherIdutilisateur(Utilisateur utilisateur)
        {
            // Pas d'utilisateur
            if (utilisateur == null)
                return -1;

            // On cherche l'identifiant
            utilisateur = UtilisateurData.getUtilisateur(utilisateur.email, utilisateur.password);
            if (utilisateur == null)
                return -1;

            // Identifiant trouvé, on le retourne
            return utilisateur.idutilisateur;
        }
    
        /// <summary>
        /// Indique si un utilisateur est amis avec un autre utilisateur.
        /// Le paramètre utilisateur doit avoir les champs email et password renseignés.
        /// </summary>
        /// <param name="utilisateur">L'utilisateur fesant l'objet du test</param>
        /// <param name="idamis">L'identifiant de l'autre utilisateur</param>
        /// <returns>true s'il a le droit, false sinon</returns>
        public static bool estAmisAvec(Utilisateur utilisateur, int idamis)
        {
            // On recherche l'identifiant de l'utilisateur
            int idutilisateur = rechercherIdutilisateur(utilisateur);
            if (idutilisateur <= 0)
                return false;

            // L'utilisateur peut accèder à ses propres données
            if (idutilisateur == idamis)
                return true;

            // On va chercher la relation d'amitié
            Amitie amitie = AmitieData.getAmitie(idutilisateur, idamis);
            if (amitie != null && amitie.etat == AmitieEtat.AMIS)
                return true;

            // Sinon il ne figure pas dans la liste d'amis
            return false;
        }

        /// <summary>
        /// Indique si l'utilisateur à bien pour identifiant idutilisateur.
        /// Le paramètre utilisateur doit avoir les champs email et password renseignés.
        /// </summary>
        /// <param name="utilisateur">L'utilisateur fesant l'objet du test</param>
        /// <param name="idamis">L'identifiant du profil à modifier ou supprimer</param>
        /// <returns>true s'il a le droit, false sinon</returns>
        public static bool aPourIdentifiant(Utilisateur utilisateur, int idutilisateur)
        {
            // Les deux identifiants doivent être égaux
            return (rechercherIdutilisateur(utilisateur) == idutilisateur);
        }
    }
}
